#include <stdio.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <sys/shm.h>
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
#include <stdlib.h>
#include "address_book_system.h"
//这是后台进程，用于接收前台进程所传递的信号

int FtokCreate(struct msg** p)
{
    key_t key=ftok("./app",'a');
    if (-1==key)
    {
        perror("ftok err\n");
        return -1;
    }
    int shmid = shmget(key,128,IPC_CREAT|IPC_EXCL|0666);
    if (-1==shmid)
    {
        if (EEXIST == errno)
        {
            shmid=shmget(key,128,0666);
        }
        else
        {
            perror("shmget err\n");
            return -1;
        }
    }
    *p=(struct msg*)shmat(shmid,NULL,0);
    if(*p==(struct msg*)-1)
    {
        perror("shmat err\n");
        return -1;
    }
    return shmid;
}

int main(int argc,char const* argv[])
{
    FILE* fp;
    struct msg* p;
    int usernum=0;

    int shmid=FtokCreate(&p);
    p->flag=0;
    
    while (1)
    {
        while(1)//初始界面
        {

            if(p->flag==LOGINSUCCESS)
            {
                printf("登录成功!\n");
                printf("登录用户:%s\n",p->userdata.account);
                printf("登录密码:%s\n",p->userdata.password);
                break;
            }
            else if (p->flag==REGISTER)//注册
            {
                
            }
            else if (p->flag==LOGOUT)//退出
            {
                printf("用户退出!\n");
                shmctl(shmid,IPC_RMID,NULL);
                return 0;
            }
            else
            {
                continue;
            }
        }
        while (p->flag==LOGINSUCCESS)//主界面
        {
            if (p->userflag==ADDCONTACT)//添加
            {
                //Add_Contact(usernum);
            }
            else if (p->userflag==SHOWCONTACT)//显示
            {
                //Show_Contact(usernum);
            }
            else if (p->userflag==DELETECONTACT)//删除
            {
                //Delete_Contact(usernum);
            }
            else if (p->userflag==FINDCONTACT)//查找
            {
                //Find_Contact(usernum);
            }
            else if (p->userflag==CHANGECONTACT)//修改
            {
                //Change_Contact(usernum);
            }
            else if (p->userflag==CLEARCONTACT)//清空
            {
                //Clear_Contact(usernum);
            }
            else if (p->userflag==SETUP)//设置
            {
                //Setup();
            }
            else if (p->userflag==SIGNOUT)//用户退出
            {
                //User_Log_Out();
                break;
            }
            else if(p->userflag==DEREGISTER)//注销
            {
                //User_Deregistration_Features(usernum);
                break;
            }
            else
            {
                continue;
            }
        }
    }
    
    shmctl(shmid,IPC_RMID,NULL);
    return 0;
}